S3ライフサイクルルールの削除ルールでフォルダを残したい
困っていたこと
S3バケットのライフサイクルルールで、スコープをバケット全体にし、削除ルールを設定していたところ、フォルダも削除されてしまいました。
フォルダを残しておくにはどうすれば良いでしょうか。
どうすればいいのか
まず、S3にフォルダという概念は存在しません。 S3はオブジェクトストレージのため、ディレクトリ構造ではなくオブジェクト名でデータを管理しているため、階層がありません。
詳細は以下の弊社ブログをご覧ください。
フォルダという概念はありませんが、マネジメントコンソールから「フォルダの作成」でフォルダを作成した場合、S3はフォルダ名をキーとする0バイトのオブジェクトを作成します。
フォルダを使用して Amazon S3 コンソールのオブジェクトを整理する - Amazon Simple Storage Service
Amazon S3 にフォルダを作成すると、S3 は、指定したフォルダ名に設定されたキーを持つ 0 バイトのオブジェクトを作成します。例えば、バケットに photos という名前のフォルダを作成した場合、Amazon S3 コンソールは photos/ キーを使用して 0 バイトのオブジェクトを作成します。
そのため、S3バケットのライフサイクルルールでフォルダを削除したくない場合、フィルターを利用して削除するオブジェクトの最小オブジェクトサイズを1バイトにする方法が考えられます。
検証
バケットにオブジェクトを以下のように配置しました。
test1/
test2/
は「フォルダの作成」から作成しています。
s3test.html test1/ test2/ test2/testtext.txt
対象のバケットにライフサイクルルールを設定します。
「管理」タブから「ライフサイクルルールを作成」を選択
以下のように設定しました。
ルールスコープを選択 1 つ以上のフィルターを使用してこのルールのスコープを制限する 最小オブジェクトサイズを指定 1 バイト ライフサイクルルールのアクション オブジェクトの現行バージョンを有効期限切れにする オブジェクトの現行バージョンの有効期限が切れる オブジェクト作成後の日数 1日後
結果
1日後...
s3test.html
は削除され、test1/
test2/
のみ残りました。
test2/
配下の testtext.txt
も削除されていました。